package es.gestores;

import java.util.HashMap;

import es.subsistemas.Subsistema;

/**
 * Gestiona los subsistemas.
 * @author Miguel Vicente
 */
public class GestorSubsistemas {
	
	private HashMap<String, Subsistema> subsistemas;
	
	/**
	 * Constructor. Crea un nuevo GestorSubsistemas
	 */
	public GestorSubsistemas() {
		this.subsistemas = new HashMap<String, Subsistema>();
	}
	/**
	 * Agrega un subsistema al gestor.<br>
	 * Si el subsistema a agregar es <code>null</code> no se agrega.<br>
	 * Si en el gestor ya habia un subsistema con el mismo tipo que el subsistema a agregar, se
	 * sustituira el antiguo por el nuevo subsistema.
	 * @param subsistema Subsistema a agregar
	 */
	public void agregarSubsistema(Subsistema subsistema) {
		if (subsistema != null) {
			subsistemas.put(subsistema.getTipo(), subsistema);
		}
	}
	/**
	 * Elimina un subsistema del gestor.
	 * @param tipo Tipo que identifica al subsistema
	 */
	public void eliminarSubsistema(String tipo) {
		subsistemas.remove(tipo);
	}
	/**
	 * Elimina todos los subsistemas del gestor.
	 */
	public void eliminarTodo() {
		subsistemas.clear();
	}
	/**
	 * Devuelve el subsistema especificado. Si el subsistema no esta en el gestor devuelve null.
	 * @param tipo Tipo que identifica al subsistema
	 * @return Subsistema
	 */
	public Subsistema getSubsistema(String tipo) {
		return subsistemas.get(tipo);
	}
	/**
	 * Procesa el subsistema especificado.
	 * @param tipo Tipo que identifica al subsistema
	 * @param delta Tiempo transcurrido desde la ultima actualizacion
	 */
	public void procesarSubsistema(String tipo, double delta) {
		Subsistema subsistema = subsistemas.get(tipo);
		if (subsistema != null) {
			subsistema.procesar(delta);
		}
	}

}
